#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

int high,width;//游戏画面尺寸
int bird_x,bird_y;//小鸟坐标
int speed=0;//控制速度
int bar_y,bar_xTop,bar_xDown;//障碍物坐标
int score;

void gotoxy(int x,int y)//类似于清屏函数，光标移动到原点位置进行重画
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}

void startup() {
	high=24;
	width=25;

	bird_x=0;
	bird_y=width/3;

	bar_y=width;
	bar_xTop=high/4;
	bar_xDown=high/2;

	score=0;
}

void show() {
	gotoxy(0,0);

	int i,j;
	//system("cls");

	for (i=0;i<=high+1;i++) {
		for (j=0;j<=width;j++) {
			if ((i==bird_x)&&(j==bird_y))
				printf("@");
			else if ((j==bar_y)&&((i<=bar_xTop)||(i>=bar_xDown)))
				printf("*");//输出障碍物
			else
				printf(" ");
		}
		printf("\n");
	}
	printf("得分：%d\n",score);
}


void updateWithoutInput() {
	if (bird_y==bar_y) {
		if ((bird_x>bar_xTop)&&(bird_x<bar_xDown))
			score++;
		else {
			printf("Game over!\n");
			system("pause");
			exit(0);
		}
	}

	bird_x++;

	if (bar_y>0)
		bar_y--;
	else {
		bar_y=width;

		int randPosition=rand() % (high-5);

		bar_xTop=randPosition;
		bar_xDown=randPosition+high/4;
	}
	Sleep(100);
	
}

void updateWithInput() {
	char input;
	if (kbhit()) {
		input=getch();
		if (input==' ') {
			bird_x=bird_x-2;
		}
	}
}


int main() {
	startup();
	while(1) {
		show();
		updateWithInput();
		updateWithoutInput();
	}

return 0;
}